#include "stdafx.h"
#include "QtWidgetsApplication.h"
#include <FileCategory.h>
#include <iostream>

using namespace std;

QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
  
    QWidget* centralWidget = new QWidget(this);
    QVBoxLayout* mainLayout = new QVBoxLayout(centralWidget);
    desktopPathLabel = new QPlainTextEdit(this);
    // 创建标签但不立即显示
    label = new QLabel("正在获取桌面路径...", centralWidget);
    organize = new QPushButton("整理");


    GetDesktopPath();
    ScanDesktopFiles();
    OrganizeByType();
    mainLayout->addWidget(label);  // 添加到布局
    mainLayout->addWidget(organize);
    setCentralWidget(centralWidget);  // 设置中央widget

    connect(organize,&QPushButton::clicked,this,&QtWidgetsApplication::OrganizeByType);

 
}
// 初始化方法实现
bool QtWidgetsApplication::Initialize() {
    return GetDesktopPath(); 
   
    // 调用获取桌面路径方法
}

/// <summary>
/// 按类型整理桌面文件
/// </summary>
void QtWidgetsApplication::OrganizeByType()
{
    //扫描文件
    ScanDesktopFiles();
	auto categories= FileCategory::CategorizeFiles(desktopFiles);
    wcout << L"\n=== 按类型整理结果 ===\n";
    for (const auto& category : categories) {
        std::wcout << L"\n[" << category.first << L"] ("
            << category.second.size() << L" 个文件)\n";

        for (const auto& file : category.second) {
            std::wcout << L"  • " << file << L"\n";
        }
    }
}


// 扫描桌面文件实现
bool QtWidgetsApplication::ScanDesktopFiles()
{
    // 清空之前的文件列表
    if (desktopFiles.size() > 0) 
    {
        desktopFiles.clear();
    }
    // 构建搜索路径（所有文件）
    wstring searchPath = DesketopPath + L"\\*.*";
    // 定义文件查找数据结构
	WIN32_FIND_DATAW findData;
    // 开始查找第一个文件.windows api函数
    HANDLE hFind = FindFirstFileW(searchPath.c_str(),&findData);

    if (hFind == INVALID_HANDLE_VALUE) 
    {
        return false;
    }
    //查找文件
    do {
		    //wcscmp 比较两个宽字符串，相等返回0，不等返回非0，类似strcmp
            if(wcscmp(findData.cFileName, L".") == 0 ||  // 跳过当前目录标记
               wcscmp(findData.cFileName, L"..") == 0) // 跳过上级目录标记
            {
                continue;
            }
            //if (wcscmp(findData.cFileName, L".") == 0 ||   // 跳过当前目录标记
            //    wcscmp(findData.cFileName, L"..") == 0)
            //{  // 跳过上级目录标记
            //    continue;
            //}

			// 判断是否为文件（非目录）
            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
            {
				desktopFiles.push_back(findData.cFileName); // 添加文件名到列表
            }

    
    } while(FindNextFileW(hFind,&findData)!=0);//查找下一个文件

	FindClose(hFind);//关闭查找句柄
  
    desktopPathLabel->setFixedHeight(500);
    for (int i = 0; i < desktopFiles.size(); i++)
    {
		QString fileName = QString::fromStdWString(desktopFiles[i]);
        desktopPathLabel->appendPlainText(fileName);

    }
   
    return true;
}

/// <summary>
/// 获取桌面地址
/// </summary>
bool  QtWidgetsApplication::GetDesktopPath()
{
    wchar_t path[_MAX_PATH];
    bool v = SHGetFolderPathW(NULL, CSIDL_DESKTOP, NULL, 0, path);
    if (SUCCEEDED(v))
    {
        DesketopPath = path;
        return true;
    }
	QString paths= QString::fromStdWString(DesketopPath);
    label->setText(paths);
    label->setWordWrap(true);
    return false;
}
QtWidgetsApplication::~QtWidgetsApplication()
{}

